# 数据模型
from pydantic.types import Json
from sqlalchemy import Boolean,Column,Integer,String,Enum
from sqlalchemy.sql.schema import ForeignKey
from sqlalchemy.sql.sqltypes import DECIMAL, JSON, DateTime
from sqlalchemy.sql.expression import false
from sqlalchemy.sql.functions import current_timestamp
from sqlalchemy.sql.sqltypes import DECIMAL, TEXT
from sql.database import Base

# 创建用户数据模型

# 车辆表
class Clb(Base):
  __tablename__='clb'  # 指明模型对应的表名
  # 定义属性
  bbkh = Column(String(20), primary_key=True, nullable=False)
  cpzh = Column(String(20), nullable=False)
  czxm = Column(String(20))
  zwgs = Column(Integer, default=0, nullable=False)
  cldc = Column(Enum('普通', '中档', '高档', '豪华'), nullable=False)
  clzt = Column(Enum('未报', '已报', '在检', '停检', '出站', '停班', '禁用'), nullable=False)
  syzw = Column(JSON)
  tbyy = Column(String(191))
  acount = Column(String(20))
  xlbXlbh = Column(String(191), nullable=False)
  gsbGsbh = Column(String(191), nullable=False)
  # 一对多:
  # xlbXlbh = relationship('Xlb')
  # gsbGsbh = relationship('Gsb')

  class Config:
      orm_mode = True

# 车辆结算表
class Cljsb(Base):
  __tablename__='cljsb'  # 指明模型对应的表名
  # 定义属性
  id = Column(Integer,primary_key=True)  # 编号
  rqsj = Column(DateTime, default=0,nullable=False)  # 日期事件
  mdzm = Column(String(10),nullable=False)  # 目的站名
  cplx = Column(String(4),nullable=False)  # 车票类型
  pjzs = Column(DECIMAL(10, 2), default=0.0,nullable=False)  # 票价总数
  tbzs = Column(DECIMAL(10, 2), default=0.0,nullable=False)  # 特别总数
  jszt = Column(Enum('未结','已结'),nullable=False)   # 结算状态
  bcbh = Column(String(6),nullable=False)  # 班次编号
  czy = Column(String(6),nullable=False)  # 操作员
  cpzh = Column(String(10),nullable=False)  # 车牌照号
  ssgs = Column(String(16),nullable=False)  # 所属公司
  bbkh = Column(String(20),nullable=False)  # 报班卡号
  cpgs = Column(Integer,nullable=False)  # 车票个数

# 车票表
'''class Cpb(Base):
  __tablename__='cpb'  # 指明模型对应的表名
  cpbh = Column(String(10),primary_key=True,nullable=False)#车票编号
  sfcz = Column(String(10),nullable=False,default='邯郸')#始发车站
  mdcz = Column(String(10))#目的车站
  spy = Column(String(6))#售票员
  pj = Column(DECIMAL(10, 2), default=0.0, nullable=False)#票价
  rqsj = Column(DateTime, default=0)#日期时间      
  zwh = Column(String(191))#座位号
  cplx = Column(String(4),nullable=False,default='全票')#车票类型
  cpzt = Column(String(4),nullable=False,default='正常')#车票状态
  tgpy = Column(String(6))#退改票价
  sxf = Column(DECIMAL(10, 2), default=0.0,nullable=False)#手续费
  jpk = Column(String(8))#检票口
  sfjp = Column(String(4))#是否检票
  bbkh = Column(String(20))#报班卡号
  spjs = Column(Enum('未结','已结'),nullable=False)#售票结算
  tgjs = Column(Enum('未结','已结'),nullable=False)#退改结算
  cljs = Column(Enum('未结','已结'),nullable=False)#车辆结算
  tbpj = Column(DECIMAL(10, 2), default=0.0)#特别票价
  spsj = Column(DateTime, default=0)#售票时间
  xlbh = Column(String(6))#线路编号
  mdzh = Column(String(6))
  ssgs = Column(Enum('三公司','东站'),nullable=False)#所属公司
  jpfs = Column(Enum('固定','流水','混检'),nullable=False)#检票方式
  bcbh = Column(String(6))#班次编号
  lkxm = Column(String(20))#旅客姓名
  sfzh = Column(String(18))#始发站号'''
  # 车票表
class Cpb(Base):
  __tablename__='cpb'  # 指明模型对应的表名
  cpbh = Column(String(10),primary_key=True,nullable=False)#车票编号
  sfcz = Column(String(10),nullable=False,default='邯郸')#始发车站
  mdcz = Column(String(10))#目的车站
  spy = Column(String(6))#售票员
  # pj = Column(Numeric(10,2),nullable=False,default=0.00)#票价
  # rqsj = Column(DateTime(3),default=current_timestamp(3))#日期时间       ###
  zwh = Column(String(191))#座位号
  cplx = Column(String(4),nullable=False,default='全票')#车票类型
  cpzt = Column(String(4),nullable=False,default='正常')#车票状态
  tgpy = Column(String(6))#退改票价
  # sxf = Column(Numeric(10,2),nullable=False,default=0.00)#手续费
  jpk = Column(String(8))#检票口
  sfjp = Column(String(4))#是否检票
  bbkh = Column(String(20))#报班卡号
  # spjs = Column(Enum('未结','已结'),nullable=False)#售票结算
  # tgjs = Column(Enum('未结','已结'),nullable=False)#退改结算
  # cljs = Column(Enum('未结','已结'),nullable=False)#车辆结算
  # tbpj = Column(Numeric(10,2))#特别票价
  # spsj = Column(DateTime(3),nullable=False,default=current_timestamp(3))#售票时间
  xlbh = Column(String(6))#线路编号
  # mdzh = Column(String(6))#目的站号
  # ssgs = Column(Enum('三公司','东站'),nullable=False)#所属公司
  # jpfs = Column(Enum('固定','流水','混检'),nullable=False)#检票方式
  # bcbh = Column(String(6))#班次编号
  # lkxm = Column(String(20))#旅客姓名
  # sfzh = Column(String(18))#始发站号

class Event(Base):
  __tablename__='event'  # 指明模型对应的表名
  id = Column(Integer,primary_key=True,nullable=False)
  czy = Column(String(8),nullable=False)
  rqsj = Column(DateTime, default=0,nullable=False)
  optype = Column(String(2),nullable=False)
  opdata = Column(String(191),nullable=False)
  
# 系统事件日志表(过期事件备案)
class Events(Base):
  __tablename__='events'  # 指明模型对应的表名
  id = Column(Integer,primary_key=True,nullable=False)
  czy = Column(String(8),nullable=False)
  rqsj = Column(DateTime, default=0,nullable=False)
  optype = Column(String(2),nullable=False)
  opdata = Column(DateTime, default=0,nullable=False)

# 公司表
# 公司表模型
class Gsb(Base):
  __tablename__ = 'gsb'  # 指明模型对应表明
  # 定义属性
  gsbh = Column(String(191), ForeignKey('clb.gsbGsbh'), nullable=False, primary_key=True)
  gsmc = Column(String(20), nullable=False)
  gsbz = Column(String(80))
  gsaxount = Column(String(20))

  class Config:
      orm_mode = True

# 班次计划表
class Jhb(Base):
  __tablename__ = 'jhb'  # 指明模型对应表明
  # 定义属性
  bcbh = Column(String(191), primary_key=True, nullable=False)
  fcsj = Column(String(5), nullable=False)
  real_time = Column(DateTime, default=0, nullable=False)
  tqsj = Column(Integer)
  bclx = Column(Enum('流水', '固定'), nullable=False)
  bczt = Column(Enum('未报', '已报', '禁用'), nullable=False)
  xlbXlbh = Column(String(191), nullable=False)
  clbBbkh = Column(String(20))
  autoSubmit = Column(Integer, default=0, nullable=False)

  class Config:
      orm_mode = True

# 领票日志表
class Logcp(Base):
  __tablename__='logcp'  # 指明模型对应的表名
  #定义属性
  id = Column(Integer,primary_key=True,nullable=False) #id
  rqsj = Column(DateTime, default=0,nullable=False)#日期时间
  yhbh = Column(String(10),nullable=False)#用户编号
  qsph = Column(String(20),nullable=False)#起始票号
  zzph = Column(String(20),nullable=False)#终止票号
  oper = Column(String(4),default='领票',nullable=False)#操作类型
  czy = Column(String(8),nullable=False)#操作员

# 混检车辆表
class Mix(Base):
  __tablename__='mix'  # 指明模型对应的表名
  #定义属性
  id = Column(Integer,primary_key=True,nullable=False) #id
  xlbh = Column(String(6),primary_key=True)  # 线路编号
  xlmc = Column(String(20),nullable=False)  # 线路名称
  group_id = Column(String(4),nullable=False) #group_id混检组

# 人员结算表
class Ryjsb(Base):
  __tablename__='ryjsb'  # 指明模型对应的表名
  id = Column(Integer,primary_key=True)#编号
  yhbh = Column(String(6),nullable=False) #用户编号
  rqsj = Column(DateTime, default=0,nullable=False)#日期时间
  czlx = Column(String(200),nullable=False)#操作类型
  cpsl = Column(Integer,nullable=False)#车票数量
  pj = Column(DECIMAL(10, 2), default=0.0,nullable=False)#票价
  tbpj= Column(DECIMAL(10, 2), default=0.0,nullable=True)#特别票价
  sxf=Column(DECIMAL(10, 2), default=0.0,nullable=True)#手续费
  jszt = Column(Enum('未结','已结'),nullable=False)#结算状态
  czy = Column(String(8),nullable=False)#操作员
  cpbh = Column(String(8),nullable=True)#车票编号

class Xlb(Base):
  __tablename__ = 'xlb'  # 指明模型对应表明
  # 定义属性
  xlbh = Column(String(191), ForeignKey('clb.xlbXlbh'), nullable=False, primary_key=True)
  xlmc = Column(String(20), nullable=False)
  xlzt = Column(Enum('正常', '禁用'), nullable=False)
  xlbl = Column(DECIMAL(10, 2), default=0.0, nullable=False)
  sfcz = Column(String(10), default='邯郸', nullable=False)
  tjcz = Column(String(10))
  zdcz = Column(String(10), default='', nullable=False)
  lcdj = Column(DECIMAL(10, 2), default=0.0, nullable=False)
  jpk = Column(Integer(), default=0, nullable=False)
  xlgs = Column(Enum('东站', '三公司'), nullable=False)
  lssj = Column(String(5), default='19:00', nullable=False)
  xllx = Column(Enum('流水', '固定'))

  class Config:
      orm_mode = True

# 线路站点表
class Xlzdb(Base):
  __tablename__='xlzdb'  # 指明模型对应的表名
  id=Column(Integer,autoincrement=True,nullable=false)#autoincrement=True自增
  lc=Column(DECIMAL(10,2),default=0.00,nullable=false)#里程
  ptpj=Column(DECIMAL(10,2),default=0.00,nullable=false)#普通票价
  zdpj=Column(DECIMAL(10,2),default=0.00,nullable=false)#中档票价
  hhpj=Column(DECIMAL(10,2),default=0.00,nullable=false)#豪华票价
  tbpj=Column(DECIMAL(10,2),default=1.50,nullable=false)#特别票价
  xlbXlbh=Column(String(191),nullable=false,primary_key=True)#线路编号
  zdbZdbh=Column(String(191),nullable=false,primary_key=True)#站点编号
  xlzdzt=Column(Enum('正常','禁用'),nullable=false)#线路站点状态

# 用户表
class Yhb(Base):
  __tablename__='yhb'  # 指明模型对应的表名
  # 定义属性
  yhbh = Column(String(20),primary_key=True)  # 用户编号
  yhxm = Column(String(20),nullable=False)    # 用户姓名
  yhmm = Column(String(80),nullable=False)    # 用户编号
  yhzt = Column(Enum('正常','禁用'),nullable=False)   # 用户状态  枚举类型：正常、禁用
  czqx = Column(Enum('查询','报班','检票','售票','总控','财务','服务台'),nullable=False)   # 操作权限  枚举类型：正常、禁用
  qsph = Column(String(20))    # 起始票号
  zzph = Column(String(20),nullable=False)    # 终止票号
  bfqs = Column(String(20),nullable=False)    # 备份起始
  bfzz = Column(String(20),nullable=False)    # 备份终止
  yhgs = Column(Enum('三公司','东站'),nullable=False)   # 操作权限  枚举类型：正常、禁用
  yhgroup = Column(Enum('上午','下午'))   # 操作权限  枚举类型：正常、禁用


  class Test(Base):
    __tablename__ = 'test'   #指明模型对应的表名
    #定义属性
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(20))



# 站点表
class Zdb(Base):
  __tablename__='zdb'  # 指明模型对应的表名
  zdbh = Column(String(191),primary_key=True,nullable=False)#公司编号
  pybm = Column(String(6),nullable=False)                   #拼音编码
  zdmc = Column(String(10),nullable=False)                  #站点名称
  zdbz = Column(TEXT)                                   #站点备注
  zdzt = Column(Enum('正常','禁用'))  #枚举 ，两个状态 正常，禁用       #站点状态
